/************************************************************
** Archivo:		ProdSerView
** Autor:		
** Fecha:		16/05/2009 19:19:05
** Descripción:	Clase generada automáticamente
** Cliente:		SC
** Proyecto:	eWedding
************************************************************/

using System;
using System.Collections.Generic;
using System.Text;

using Circo.Framework.BusinessLogic;
using Circo.Framework.Persistencia;

using SC.eWedding.Data.Entities;


namespace SC.eWedding.BusinessLogic.Views
{
    public partial class ProdSerView : AbstractView
    {
    
        #region Private Vars

		private ProdSerEntity _prodSer;

        #endregion

        #region Constructors

		
		public ProdSerView()
		{
			CrearVista(false);
		}

		public ProdSerView(bool createRelatedViews)
		{
			CrearVista(createRelatedViews);
		}

		private void CrearVista(bool createRelatedViews)
		{
			this._prodSer = new ProdSerEntity();

			if (createRelatedViews)

			{

				this.Tipo = new TipoProdView(true);

				this.Proveedor = new ProveedorView(true);

			}

		}

		public ProdSerView(ProdSerEntity unaEntidad)
		{
			if (unaEntidad != null)
				this._prodSer = unaEntidad;

		}



        #endregion
        
        #region Attributes

		
		public int Id
		{
			get { return this._prodSer.Id; }
			set { this._prodSer.Id = value; }
		}

		private TipoProdView _tipo = null;
		public TipoProdView Tipo
		{
			get
			{
				if (this._tipo == null)
				{
					if (this._prodSer.Tipo != null)
						this._tipo = new TipoProdView(this._prodSer.Tipo);
				}
				return _tipo;
			}
			set
			{
				if (value != null)
				{
					this._prodSer.Tipo = value.MapToEntity();
					this._tipo = new TipoProdView(this._prodSer.Tipo);
				}
				else
				{
					this._prodSer.Tipo = null;
					this._tipo = null;
				}
			}
		}

		public decimal Precio
		{
			get { return this._prodSer.Precio; }
			set { this._prodSer.Precio = value; }
		}


private List<ProdSerLocView> _localidades;
		public List<ProdSerLocView> Localidades
		{
			get
			{
				if (_localidades == null)
				{
					List<ProdSerLocEntity> listaEntidades = this._prodSer.Localidades;

					this._localidades = new List<ProdSerLocView>();

					foreach (ProdSerLocEntity unaEntidad in listaEntidades)

						this._localidades.Add(new ProdSerLocView(unaEntidad));

				}
				return _localidades;
			}
			set
			{
				this._localidades = value;
				if (value != null)
				{
					List<ProdSerLocEntity> listaEntidades = new List<ProdSerLocEntity>();

					foreach (ProdSerLocView unaView in value)

						listaEntidades.Add(unaView.MapToEntity());

					this._prodSer.Localidades = listaEntidades;

				}
				else
				{
					this._prodSer.Localidades = null;

				}
			}
		}

		public TipoCateg Categoria
		{
			get { return (TipoCateg)this._prodSer.Categoria; }
			set { this._prodSer.Categoria = (short)value; }
		}

		public string Descripcion
		{
			get { return this._prodSer.Descripcion; }
			set { this._prodSer.Descripcion = value; }
		}


private List<FotoView> _fotos;
		public List<FotoView> Fotos
		{
			get
			{
				if (_fotos == null)
				{
					List<FotoEntity> listaEntidades = this._prodSer.Fotos;

					this._fotos = new List<FotoView>();

					foreach (FotoEntity unaEntidad in listaEntidades)

						this._fotos.Add(new FotoView(unaEntidad));

				}
				return _fotos;
			}
			set
			{
				this._fotos = value;
				if (value != null)
				{
					List<FotoEntity> listaEntidades = new List<FotoEntity>();

					foreach (FotoView unaView in value)

						listaEntidades.Add(unaView.MapToEntity());

					this._prodSer.Fotos = listaEntidades;

				}
				else
				{
					this._prodSer.Fotos = null;

				}
			}
		}


private List<CaracteristicaView> _caracteristicas;
		public List<CaracteristicaView> Caracteristicas
		{
			get
			{
				if (_caracteristicas == null)
				{
					List<CaracteristicaEntity> listaEntidades = this._prodSer.Caracteristicas;

					this._caracteristicas = new List<CaracteristicaView>();

					foreach (CaracteristicaEntity unaEntidad in listaEntidades)

						this._caracteristicas.Add(new CaracteristicaView(unaEntidad));

				}
				return _caracteristicas;
			}
			set
			{
				this._caracteristicas = value;
				if (value != null)
				{
					List<CaracteristicaEntity> listaEntidades = new List<CaracteristicaEntity>();

					foreach (CaracteristicaView unaView in value)

						listaEntidades.Add(unaView.MapToEntity());

					this._prodSer.Caracteristicas = listaEntidades;

				}
				else
				{
					this._prodSer.Caracteristicas = null;

				}
			}
		}

		private ProveedorView _proveedor = null;
		public ProveedorView Proveedor
		{
			get
			{
				if (this._proveedor == null)
				{
					if (this._prodSer.Proveedor != null)
						this._proveedor = new ProveedorView(this._prodSer.Proveedor);
				}
				return _proveedor;
			}
			set
			{
				if (value != null)
				{
					this._prodSer.Proveedor = value.MapToEntity();
					this._proveedor = new ProveedorView(this._prodSer.Proveedor);
				}
				else
				{
					this._prodSer.Proveedor = null;
					this._proveedor = null;
				}
			}
		}

		public string Denominacion
		{
			get { return this._prodSer.Denominacion; }
			set { this._prodSer.Denominacion = value; }
		}


        #endregion

        #region Mapping

		
		public ProdSerEntity MapToEntity()
		{
			return this._prodSer;
		}

		public override Entity MapToBaseEntity()
		{
			return MapToEntity();
		}



        #endregion

        #region CollectionSyncro

		public override void SynchronizeCollections()
		{
			//search for deleted items
			for (int i = 0; i < this._prodSer.Localidades.Count; i++)
			{
				ProdSerLocEntity anEntity = this._prodSer.Localidades[i];
				bool found = false;

				foreach (ProdSerLocView aView in this.Localidades)
				{
					if (anEntity.Id == aView.Id)
					{
						found = true;
						break;
					}
				}

				if (!found)
				{
					this._prodSer.Localidades.RemoveAt(i);
					i--;
				}
			}

			//search for added items
			for (int i = 0; i < this.Localidades.Count; i++)
			{
				ProdSerLocView aView = this.Localidades[i];

				if (aView.Id == 0)
					this._prodSer.Localidades.Add(aView.MapToEntity());
			}
			//search for deleted items
			for (int i = 0; i < this._prodSer.Fotos.Count; i++)
			{
				FotoEntity anEntity = this._prodSer.Fotos[i];
				bool found = false;

				foreach (FotoView aView in this.Fotos)
				{
					if (anEntity.Id == aView.Id)
					{
						found = true;
						break;
					}
				}

				if (!found)
				{
					this._prodSer.Fotos.RemoveAt(i);
					i--;
				}
			}

			//search for added items
			for (int i = 0; i < this.Fotos.Count; i++)
			{
				FotoView aView = this.Fotos[i];

				if (aView.Id == 0)
					this._prodSer.Fotos.Add(aView.MapToEntity());
			}
			//search for deleted items
			for (int i = 0; i < this._prodSer.Caracteristicas.Count; i++)
			{
				CaracteristicaEntity anEntity = this._prodSer.Caracteristicas[i];
				bool found = false;

				foreach (CaracteristicaView aView in this.Caracteristicas)
				{
					if (anEntity.Id == aView.Id)
					{
						found = true;
						break;
					}
				}

				if (!found)
				{
					this._prodSer.Caracteristicas.RemoveAt(i);
					i--;
				}
			}

			//search for added items
			for (int i = 0; i < this.Caracteristicas.Count; i++)
			{
				CaracteristicaView aView = this.Caracteristicas[i];

				if (aView.Id == 0)
					this._prodSer.Caracteristicas.Add(aView.MapToEntity());
			}
		}



        #endregion
        
		#region Enums

		public enum  TipoCateg
		{
			Regalo = 3,
			Servicio = 2,
			Producto = 1,
		}

		#endregion

    }
}
